package com.king.collect;

import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;

/**
 * @author taomk
 * @version 1.0
 * @since 15-2-1 下午9:23
 */
public class BimapTest {

	/**
	 * BiMap提供了一种新的集合类型，它提供了key和value的双向关联的数据结构。
	 * @param args
	 */
	public static void main(String [] args) {
		testBimap();
	}

	/**
	 * Bimap数据的强制唯一性：
	 * 在使用BiMap时，会要求Value的唯一性。如果value重复了则会抛出错误：java.lang.IllegalArgumentException。
	 * 如果我们确实需要插入重复的value值，那可以选择forcePut方法。但是我们需要注意的是前面的key也会被覆盖了。
	 */
	public static void testBimap() {
		BiMap<Integer,String> logfileMap = HashBiMap.create();
		logfileMap.put(1,"a.log");
		logfileMap.put(2,"b.log");
		logfileMap.put(3,"c.log");
		System.out.println("logfileMap:"+logfileMap);

		// 理解inverse方法
		// inverse方法会返回一个反转的BiMap，但是注意这个反转的map不是新的map对象，它实现了一种视图关联，这样你对于反转后的map的所有操作都会影响原先的map对象。
		BiMap<String,Integer> filelogMap = logfileMap.inverse();
		System.out.println("filelogMap:"+filelogMap);

		logfileMap.put(4,"d.log");
		System.out.println("logfileMap:"+logfileMap);
		System.out.println("filelogMap:"+filelogMap);
	}

	/**
	 * BiMap的实现类
	 * Key-Value Map Impl     Value-Key Map Impl     Corresponding BiMap
	 * HashMap                HashMap                HashBiMap
	 * ImmutableMap           ImmutableMap           ImmutableBiMap
	 * EnumMap                EnumMap                EnumBiMap
	 * EnumMap                HashMap                EnumHashBiMap
	 */
}
